iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0
AI & Data

紮實的ML機器學習原理~打造你對資料使用sklearn的靈敏度系列 第 18

DAY 18 「Optuna:一個用於超參數優化的Python庫」分類模型啦~

  • 分享至 

  • xImage
  •  

Optuna 對一個簡單的分類模型(比如邏輯回歸)進行超參數優化~

pip install optuna
import optuna
import numpy as np

# 導入需要的庫和模型
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# 創建一個簡單的示例數據集
X, y = np.random.rand(100, 5), np.random.randint(0, 2, 100)

# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 定義目標函數
def objective(trial):
    # 定義超參數搜索空間
    C = trial.suggest_loguniform('C', 1e-10, 1e10)
    solver = trial.suggest_categorical('solver', ['liblinear', 'newton-cg', 'sag', 'lbfgs'])

    # 創建邏輯回歸模型
    model = LogisticRegression(C=C, solver=solver, random_state=42)
    
    # 在訓練集上訓練模型
    model.fit(X_train, y_train)
    
    # 在測試集上進行預測
    y_pred = model.predict(X_test)
    
    # 計算準確率
    accuracy = accuracy_score(y_test, y_pred)
    
    return 1 - accuracy

# 創建Optuna Study對象並進行優化
study = optuna.create_study(direction='minimize')
study.optimize(objective, n_trials=100)

# 輸出最優超參數
print("Best trial:")
best_trial = study.best_trial

print(f"Value: {best_trial.value}")
print(f"Params: {best_trial.params}")

在這個示例中,我們首先導入了所需的庫,包括 optuna、numpy 和需要用到的模型和評估指標。

然後,我們創建了一個簡單的示例數據集(X 和 y),並將其劃分為訓練集和測試集。

接著,我們定義了目標函數 objective,這里使用 Optuna 提供的 trial 對象來定義了兩個超參數:正則化參數 C 和求解器 solver。suggest_loguniform 用於定義一個對數均勻分布的超參數搜索空間,suggest_categorical 用於定義一個離散的超參數搜索空間。

在 objective 函數內部,我們使用了這兩個超參數來訓練邏輯回歸模型,並返回了準確率的相反數(因為 Optuna 是一個最小化問題)~

最後,我們創建了一個 Optuna 的 Study 對象,並使用 study.optimize 進行了超參數優化,設置了最大試驗次數為 100 次,最終,輸出了找到的最優超參數組合~


上一篇
DAY 17 「HyperOpt」分布式異步優化的Python庫~
下一篇
DAY 19 「四個庫(HyperOpt、Optuna、GPyOpt、Scikit-Optimize)」來做超參數優化啦~
系列文
紮實的ML機器學習原理~打造你對資料使用sklearn的靈敏度30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言